/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：太平金科-基础组件封装层-SpringBoot组件封装-缺省实现
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taipingframework.boot.web.event;

import com.taipingframework.boot.web.support.BaseUrlBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.web.servlet.context.ServletWebServerInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.lang.NonNull;

import javax.servlet.Servlet;

@Slf4j
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass({Servlet.class})
public class ServletWebServerEventAdvice implements ApplicationListener<ServletWebServerInitializedEvent> {

    private static String baseUrl;

    /**
     * 在 ServletWebServerApplicationContext 已经刷新 并且 WebServer已经准备好 之后 发布的事件
     */
    @Override
    public void onApplicationEvent(@NonNull ServletWebServerInitializedEvent webServerInitializedEvent) {
        log.debug("ServletWebServerInitializedEvent - Servlet服务初始化完毕。");
        if (baseUrl != null) {
            return;
        }
        baseUrl = BaseUrlBuilder.createBaseUrlAboutSpringWeb(webServerInitializedEvent.getApplicationContext(),
                (serverProperties) -> serverProperties.getServlet().getContextPath());
        log.info("Servlet服务初始化完毕，访问地址是：{}", baseUrl);
    }

}
